

package testPost;

//Universidad del Valle de Guatemala
//Algoritmos y Base de Datos
//Mario Gomez, 12165
//Rodimiro Castañeda, 12122


//se importan las librerias necesarias y las clases a probar
import postOpe.Postfix; // clase Postfix impoertada
import java.util.EmptyStackException;//se importa la clase a usar 
import java.lang.*;//se impoorta java.lang
import postOpe.PilaMario; //clase PilaMario importada
import static org.junit.Assert.*; //libreria estatica para metodos assert
import org.junit.*; // libreria para anotaciones


//clase de prueba de pila
public class PilaJUnitTest{
    
    //se instancia variable de PilaMario
    private PilaMario pila = new PilaMario();
    //se instancia con variable de Postfix
    private Postfix operacion = new Postfix("prueba.txt");
    
    //variables con valores asignados necesarios
    Object o = '+';
    Object u = '-';
    Object i = ' ';
    Object a = '/';
    Object e = '*';
    Object j = 12;
    Object t = 54;
    Object r = 1;
    Object p = 93;
    Object y = '?';
    Object c = 'd';
    Object x = 5.98;
    Object q = 7.009;
    
    
    //anotacion, se haran los procesos antes de hacer las pruebas
    @Before 
    public void setUp(){
        //se meten las variables a metodo push()
        pila.push(j);
        pila.push(o);
        pila.push(a);
        pila.push(e);
        pila.push(i);
        pila.push(t);
        pila.push(u);
        pila.push(p);
        pila.push(r);
        pila.push(y);
        pila.push(x);
        pila.push(c);
        pila.push(q);
    }
    
    //anotacion, aca se haran las pruebas
    @Test
    public void testPilaJUnitTest(){
        
        //metodos assert que sirven para verificar si los elementos son similares o no, se prueba metodo hasItems()
        //se comparan resultados tipo boolean
        assertSame(false, pila.hasItems());
        assertNotSame(false, pila.hasItems());
        assertSame(true, pila.hasItems());
        assertNotSame(true, pila.hasItems());
        
        //metodos assert que sirven para verificar si los elementos son iguales, se prueba metodo pop()
        //se comparan resultados tipo Object
        assertEquals(pila.pop(),a);
        assertEquals(pila.pop(),u);
        assertEquals(pila.pop(),t);
        assertEquals(pila.pop(),r);
        assertEquals(pila.pop(),p);
        assertEquals(pila.pop(),e);
        assertEquals(pila.pop(),o);
        assertEquals(pila.pop(),j);
        assertEquals(pila.pop(),i);
        assertEquals(pila.pop(),y);
        assertEquals(pila.pop(),c);
        assertEquals(pila.pop(),x);
        assertEquals(pila.pop(),q);
        //se prueba metodo realizarOperacion() 
        //se comparan resultados tipo int
        assertEquals(operacion.realizarOperacion(), -1);
        assertEquals(operacion.realizarOperacion(), 0);
        assertEquals(operacion.realizarOperacion(), 7);
        assertEquals(operacion.realizarOperacion(), 18);
        assertEquals(operacion.realizarOperacion(), 78);
        assertEquals(operacion.realizarOperacion(), 56);
        assertEquals(operacion.realizarOperacion(), 100);   
        
        
    }
}